import {
	defineStore
} from 'pinia'

export const useUserStore = defineStore('user', {
	// 状态
	state: () => ({
		userInfo: {
			userid: '',
			loginname: '',
			password: ''
		},
	}),

	// 计算属性
	getters: {
		getTokenWithPrefix: (state) => (prefix) => {
			return prefix + state.token
		},
		// 获取用户名称，提供默认值
		getUserName: (state) => {
			return state.userInfo.name || state.userInfo.loginname || '未登录用户'
		}
	},

	// 方法
	actions: {
		// 设置token
		setToken(newToken) {
			this.token = newToken
			this.isLogin = !!newToken
		},

		// 设置用户信息
		setUserInfo(info) {
			this.userInfo = {
				...this.userInfo,
				...info
			}
			this.isLogin = true
		},

		// 登录成功后保存所有用户数据
		saveLoginData(data) {
			if (data.token) {
				this.setToken(data.token)
				// 同时保存到本地存储
				uni.setStorageSync('token', data.token)
			}
			if (data.userInfo) {
				this.setUserInfo(data.userInfo)
			}
		},

		// 从本地存储加载用户数据（应用启动时调用）
		loadUserFromStorage() {
			const token = uni.getStorageSync('token')
			if (token) {
				this.setToken(token)
				// 可以在这里重新请求用户信息，确保数据最新
				this.fetchUserInfo()
			}
		},

		// 异步获取用户信息
		async fetchUserInfo() {
			try {
				const res = await uni.request({
					url: 'http://47.94.6.186:3001/api/user/info',
					header: {
						'Authorization': 'Bearer ' + this.token
					}
				})
				if (res.data.code === 0 && res.data.data) {
					this.setUserInfo(res.data.data)
				}
			} catch (err) {
				console.error('获取用户信息失败', err)
			}
		},

		// 退出登录
		logout() {
			this.token = ''
			this.userInfo = {
				name: '',
				avatar: '',
				id: '',
				loginname: ''
			}
			this.isLogin = false
			// 清除本地存储中的token
			uni.removeStorageSync('token')
		}
	}
})